﻿using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using Equation.Enterprise.Framework.ApplicationServices;

namespace ENail.Domain.Core.Contract.Services
{
    public interface IReceiptService : IApplicationService
    {
        /// <summary>
        /// Helps view all receipts on list view
        /// </summary>
        /// <returns>List of all receipts</returns>
        IList<Receipt> GetAllReceipts();

        /// <summary>
        /// Helps view receipts for search view
        /// </summary>
        /// <param name="where">Lambda condition to get receipts</param>
        /// <returns></returns>
        IList<Receipt> GetReceipts(Expression<Func<Receipt, bool>> where);

        /// <summary>
        /// Helps view active receipts only
        /// </summary>
        /// <returns>All active receipts</returns>
        IList<Receipt> GetAllActiveReceipts();

        /// <summary>
        /// Helps view details of an receipt
        /// </summary>
        /// <param name="id">Identity of receipt</param>
        /// <returns>Receipt with specified identity</returns>
        Receipt GetReceipt(int id);

        /// <summary>
        /// Insert an receipt from view
        /// </summary>
        /// <param name="receipt">nailService to be inserted</param>
        /// <returns>Number of records affected</returns>
        int InsertReceipt(Receipt nailService);

        /// <summary>
        /// Update an receipt from view
        /// </summary>
        /// <param name="receipt">nailService to be updated</param>
        /// <returns>Number of records affected</returns>
        int UpdateReceipt(Receipt nailService);

        /// <summary>
        /// Helps to inactive an receipt
        /// </summary>
        /// <param name="receipt">nailService to be inactive</param>
        /// <returns>Number of records affected</returns>
        int DeActivateReceipt(Receipt nailService);
    }
}
